package com.krisyu.chainOfResponsibility.template;

/**
 * @DATE 2022/1/5
 * @Author KrisYu
 * @Description
 */

/**
 * 责任链的模板方法
 */
public abstract class Handler {
    /**
     * 罗列可用的请求级别
     */
    public final static Level HANDLER_LELVE_1 = new Level();
    public final static Level HANDLER_LELVE_2 = new Level();
    public final static Level HANDLER_LELVE_3 = new Level();
    // 下一级处理者
    private Handler nextHandler;

    public final Response handleMessage(Request request){
        Response response = null;
        // 判断是否是自己的处理级别
        if(this.getHandlerLevel().equals(request.getRequestLevel())){
            response = this.echo(request);
        }else{
            // 不属于自己的处理级别，若有下一级处理者，交给下一级处理。
            if(this.nextHandler != null){
                response = this.handleMessage(request);
            }else{
                // 没有适当的处理者，业务自行处理
                System.out.println("没有合适的处理者，不做处理");
            }
        }
        return response;
    }

    public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }
    // 获取处理者的级别
    protected abstract Level getHandlerLevel();
    // 每个处理者都必须实现的处理任务
    protected abstract Response echo(Request request);
}
